home *** CD-ROM | disk | FTP | other *** search
/ PC World Interactive 7 / PC World Interactive 7.iso / program / ctutor.exe / TEXT / CHAP03.TXT < prev    next >
Text File  |  1994-05-15  |  19KB  |  406 lines

  1.  
  2.  
  3.  
  4.                                                         Chapter 3
  5.                                                    PROGRAM CONTROL
  6.  
  7. THE WHILE LOOP
  8. -----------------------------------------------------------------
  9. The C programming language has several structures for looping and 
  10. conditional branching.  We will cover them all in this chapter 
  11. and we will begin with the while loop.  The while loop continues 
  12. to loop while some condition is true. When the condition becomes 
  13. false, the looping is discontinued.  It therefore does just what 
  14. it says it does, the name of the loop being very descriptive. 
  15.  
  16. Load the program WHILE.C and display it for an    ===============
  17. example of a while loop.  We begin with a             WHILE.C
  18. comment and the program entry point main(),       ===============
  19. then go on to define an integer variable named 
  20. count within the body of the program.  The variable is set to 
  21. zero and we come to the while loop itself.  The syntax of a while 
  22. loop is just as shown here.  The keyword while is followed by an 
  23. expression of something in parentheses, followed by a compound 
  24. statement bracketed by braces.  As long as the expression in the 
  25. parenthesis is true, all statements within the braces will be 
  26. repeatedly executed.  In this case, since the variable count is 
  27. incremented by one every time the statements are executed, it 
  28. will eventually reach 6.  At that time the statement will not be 
  29. executed because count is not less than 6, and the loop will be 
  30. terminated.  The program control will resume at the statement 
  31. following the statements in braces. 
  32.  
  33. We will cover the compare expression, the one in parentheses, in 
  34. the next chapter.  Until then, simply accept the expressions for 
  35. what you think they should do and you will be correct for these 
  36. simple cases.
  37.  
  38. Several things must be pointed out regarding the while loop.  
  39. First, if the variable count were initially set to any number 
  40. greater than 5, the statements within the loop would not be 
  41. executed at all, so it is possible to have a while loop that 
  42. never is executed.  Secondly, if the variable were not incre-
  43. mented in the loop, then in this case, the loop would never 
  44. terminate, and the program would never complete.  Finally, if 
  45. there is only one statement to be executed within the loop, it 
  46. does not need delimiting braces but can stand alone.
  47.  
  48. Compile and run this program after you have studied it enough to 
  49. assure yourself that you understand its operation completely.  
  50. Note that the result of execution is given for this program, (and 
  51. will be given for all of the remaining example programs in this 
  52. tutorial) so you do not need to compile and execute every program 
  53. to see the results.  Be sure to compile and execute some of the 
  54. programs however, to gain experience with your compiler.  Once 
  55.  
  56.  
  57.                                                          Page 3-1
  58.  
  59.                                       Chapter 3 - Program Control
  60.  
  61. again, you may get compiler warnings in this chapter which can be 
  62. ignored temporarily.
  63.  
  64. You should also modify any programs that are not completely clear 
  65. to you until you understand them completely.  The best way to 
  66. learn is to try various modifications yourself.
  67.  
  68.  
  69. THE DO-WHILE LOOP
  70. -----------------------------------------------------------------
  71. A variation of the while loop is illustrated in   ===============
  72. the program DOWHILE.C, which you should load         DOWHILE.C
  73. and display.  This program is nearly identical    ===============
  74. to the last one except that the loop begins with 
  75. the keyword do, followed by a compound statement in braces, then 
  76. the keyword while, and finally an expression in parentheses.  The 
  77. statements in the braces are executed repeatedly as long as the 
  78. expression in parentheses is true.  When the expression in paren-
  79. theses becomes false, execution is terminated, and control passes 
  80. to the statements following this statement.
  81.  
  82. Several things must be pointed out regarding the do-while loop. 
  83. Since the test is done at the end of the loop, the statements in 
  84. the braces will always be executed at least once.  Secondly, if 
  85. the variable i were not changed within the loop, the loop would 
  86. never terminate, and hence the program would never terminate.
  87.  
  88. It should come as no surprise to you that these loops can be 
  89. nested.  That is, one loop can be included within the compound 
  90. statement of another loop, and the nesting level has no limit.  
  91. This will be illustrated later.
  92.  
  93. Compile and run this program to see if it does what you think it 
  94. should do.
  95.  
  96.  
  97. THE FOR LOOP
  98. -----------------------------------------------------------------
  99. The for loop is really nothing new, it is simply  ===============
  100. a new way to describe the while loop.  Load and      FORLOOP.C
  101. display the file named FORLOOP.C on your monitor  ===============
  102. for an example of a program with a for loop.  
  103. The for loop consists of the keyword for followed by a rather 
  104. large expression in parentheses.  This expression is really 
  105. composed of three fields separated by semi-colons.  The first 
  106. field contains the expression "index = 0" and is an initializing 
  107. field.  Any expressions in this field are executed prior to the 
  108. first pass through the loop.  There is essentially no limit as to 
  109. what can go here, but good programming practice would require it 
  110. to be kept simple.  Several initializing statements can be placed 
  111. in this field, separated by commas.
  112.  
  113.  
  114.  
  115.                                                          Page 3-2
  116.  
  117.                                       Chapter 3 - Program Control
  118.  
  119. The second field, in this case containing "index < 6", is the 
  120. test which is done at the beginning of each pass through the 
  121. loop.  It can be any expression which will evaluate to a true 
  122. or false.  (More will be said about the actual value of true and 
  123. false in the next chapter.)
  124.  
  125. The expression contained in the third field is executed each time 
  126. the loop is exercised but it is not executed until after those 
  127. statements in the main body of the loop are executed.  This field, 
  128. like the first, can also be composed of several operations 
  129. separated by commas.
  130.  
  131. Following the for() expression is any single or compound statement 
  132. which will be executed as the body of the loop.  A compound 
  133. statement is any group of valid C statements enclosed in braces.  
  134. In nearly any context in C, a simple statement can be replaced by 
  135. a compound statement that will be treated as if it were a single 
  136. statement as far as program control goes.  Compile and run this 
  137. program.
  138.  
  139. You may be wondering why there are two statements available that 
  140. do exactly the same thing because the while and the for loop do 
  141. exactly the same thing.  The while is convenient to use for a 
  142. loop when you don't have any idea how many times the loop will 
  143. be executed, and the for loop is usually used in those cases 
  144. when you are doing a fixed number of iterations.  The for loop 
  145. is also convenient because it moves all of the control 
  146. information for a loop into one place, between the parentheses, 
  147. rather than at both ends of the code.  It is your choice as to 
  148. which you would rather use.
  149.  
  150.  
  151. THE IF STATEMENT
  152. -----------------------------------------------------------------
  153. Load and display the file IFELSE.C for an        ================
  154. example of our first conditional branching           IFELSE.C
  155. statement, the if.  Notice first, that there     ================
  156. is a for loop with a compound statement as 
  157. its executable part containing two if statements.  This is an 
  158. example of how statements can be nested.  It should be clear to 
  159. you that each of the if statements will be executed 10 times.
  160.  
  161. Consider the first if statement.  It starts with the keyword if 
  162. followed by an expression in parentheses.  If the expression is 
  163. evaluated and found to be true, the single statement following 
  164. the if is executed, and if false, the following statement is 
  165. skipped.  Here too, the single statement can be replaced by a 
  166. compound statement composed of several statements bounded by 
  167. braces.   The expression "data == 2" is simply asking if the 
  168. value of data is equal to 2.  This will be explained in detail 
  169. in the next chapter.  (Simply suffice for now that if "data = 2" 
  170. were used in this context, it would mean a completely different 
  171. thing. You must use the double equal sign for comparing values.)
  172.  
  173.                                                          Page 3-3
  174.  
  175.                                       Chapter 3 - Program Control
  176.  
  177. NOW FOR THE IF-ELSE
  178. -----------------------------------------------------------------
  179. The second if is similar to the first with the addition of a new 
  180. keyword, the else in line 15.  This simply says that if the 
  181. expression in the parentheses evaluates as true, the first 
  182. expression is executed, otherwise the expression following the 
  183. else is executed.  Thus, one of the two expressions will always 
  184. be executed, whereas in the first example the single expression 
  185. was either executed or skipped.  Both will find many uses in your 
  186. C programming efforts.  Compile and run this program to see if it 
  187. does what you expect.
  188.  
  189.  
  190. THE BREAK AND CONTINUE
  191. -----------------------------------------------------------------
  192. Load the file named BREAKCON.C for an example    ================
  193. of two new statements.  Notice that in the          BREAKCON.C 
  194. first for loop, there is an if statement that    ================
  195. calls a break if xx equals 8.  The break will 
  196. jump out of the loop you are in and begin executing statements 
  197. following the loop, effectively terminating the loop.  This is a 
  198. valuable statement when you need to jump out of a loop depending 
  199. on the value of some results calculated in the loop.  In this 
  200. case, when xx reaches 8, the loop is terminated and the last 
  201. value printed will be the previous value, namely 7.  The break 
  202. always jumps out of the loop just past the terminating brace.
  203.  
  204. The next for loop starting in line 12, contains a continue 
  205. statement which does not cause termination of the loop but jumps 
  206. out of the present iteration.  When the value of xx reaches 8 in 
  207. this case, the program will jump to the end of the loop and 
  208. continue executing the loop, effectively eliminating the printf() 
  209. statement during the pass through the loop when xx is eight.  The 
  210. continue statement always jumps to the end of the loop just prior 
  211. to the terminating brace.  At that time the loop is terminated or 
  212. continues based on the result of the loop test. 
  213.  
  214. Be sure to compile and execute this program.
  215.  
  216.  
  217. THE SWITCH STATEMENT
  218. -----------------------------------------------------------------
  219. Load and display the file SWITCH.C for an        ================
  220. example of the biggest construct yet in the          SWITCH.C
  221. C language, the switch.  The switch is not       ================
  222. difficult, so don't let it intimidate you.  
  223. It begins with the keyword switch followed by a variable in 
  224. parentheses which is the switching variable, in this case truck.  
  225. As many cases as needed are then enclosed within a pair of 
  226. braces.  The reserved word case is used to begin each case, 
  227. followed by the value of the variable for that case, then a 
  228. colon, and the statements to be executed.
  229.  
  230.  
  231.                                                          Page 3-4
  232.  
  233.                                       Chapter 3 - Program Control
  234.  
  235. In this example, if the variable named truck contains the value 3 
  236. during this pass of the switch statement, the printf() in line 9 
  237. will cause "The value is three" to be displayed, and the break 
  238. statement will cause us to jump out of the switch.  The break 
  239. statement here works in much the same manner as the loop, it 
  240. jumps out just past the closing brace.
  241.  
  242. Once an entry point is found, statements will be executed until a 
  243. break is found or until the program drops through the bottom of 
  244. the switch braces.  If the variable has the value 5, the 
  245. statements will begin executing at line 13 where "case 5 :" is 
  246. found, but the first statements found are where the case 8 
  247. statements are.  These are executed and the break statement in 
  248. line 17 will direct the execution out of the bottom of the 
  249. switch just past the closing brace.  The various case values can 
  250. be in any order and if a value is not found, the default portion 
  251. of the switch will be executed.
  252.  
  253. It should be clear that any of the above constructs can be nested 
  254. within each other or placed in succession, depending on the needs 
  255. of the particular programming project at hand.  Note that the 
  256. switch is not used as frequently as the loop and the if 
  257. statements.  In fact, the switch is used infrequently but should 
  258. be completely understood by the serious C programmer.  Be sure to 
  259. compile and run SWITCH.C and examine the results.
  260.  
  261.  
  262. THE EVIL GOTO STATEMENT
  263. -----------------------------------------------------------------
  264. Load and display the file GOTOEX.C for an        ================
  265. example of a file with some goto statements in       GOTOEX.C
  266. it.  To use a goto statement, you simply use     ================
  267. the reserved word goto followed by the symbolic 
  268. name to which you wish to jump.  The name is then placed anywhere 
  269. in the program followed by a colon.  You can jump nearly anywhere 
  270. within a function, but you are not permitted to jump into a loop, 
  271. although you are allowed to jump out of a loop.
  272.  
  273. This particular program is really a mess but it is a good example 
  274. of why software writers are trying to eliminate the use of the 
  275. goto statement as much as possible.  The only place in this 
  276. program where it is reasonable to use the goto is the one in line 
  277. 18 where the program jumps out of the three nested loops in one 
  278. jump.  In this case it would be rather messy to set up a variable 
  279. and jump successively out of each of the three nested loops but 
  280. one goto statement gets you out of all three in a very concise 
  281. manner.
  282.  
  283. Some persons say the goto statement should never be used under 
  284. any circumstances, but this is rather narrow minded thinking.  
  285. If there is a place where a goto will clearly do a neater control 
  286. flow than some other construct, feel free to use it.  It should 
  287.  
  288.  
  289.                                                          Page 3-5
  290.  
  291.                                       Chapter 3 - Program Control
  292.  
  293. not be abused however, as it is in the rest of the program on 
  294. your monitor.
  295.  
  296. Entire books are written on "gotoless" programming, better known 
  297. as Structured Programming.  These will be left to your study.  
  298. One point of reference is the Visual Calculator described in 
  299. Chapter 14 of this tutorial.  This program is contained in four 
  300. separately compiled files and is a rather large complex program.  
  301. If you spend some time studying the source code, you will find 
  302. that there is not a single goto statement anywhere in it.
  303.  
  304. Compile and run GOTOEX.C and study its output.  It would be a 
  305. good exercise to rewrite it and see how much more readable it is 
  306. when the statements are listed in order.
  307.  
  308.  
  309. FINALLY, A MEANINGFUL PROGRAM
  310. -----------------------------------------------------------------
  311. Load the file named TEMPCONV.C for an example    ================
  312. of a useful, even though somewhat limited           TEMPCONV.C
  313. program.  This is a program that generates a     ================
  314. list of centigrade and fahrenheit temperatures 
  315. and prints a message out at the freezing point of water and 
  316. another at the boiling point of water.  Of particular importance 
  317. is the formatting.  The header is simply several lines of 
  318. comments describing what the program does in a manner that 
  319. catches the readers attention and is still pleasing to the eye. 
  320. You will eventually develop your own formatting style, but this 
  321. is a good way to start.  Also if you observe the for loop, you 
  322. will notice that all of the contents of the compound statement 
  323. are indented 3 spaces to the right of the for keyword, and the 
  324. closing brace is lined up under the "f" in for.  This makes 
  325. debugging a bit easier because the construction becomes very 
  326. obvious.  You will also notice that the printf() statements that 
  327. are in the if statements within the big for loop are indented 
  328. three additional spaces because they are part of another 
  329. construct. 
  330.  
  331. This is the first program in which we used more than one 
  332. variable.  The three variables are simply defined on three 
  333. different lines and are used in the same manner as a single 
  334. variable was used in previous programs.  By defining them on 
  335. different lines, we have an opportunity to define each with a 
  336. comment.  It would be possible to define them on one line, but 
  337. to do so would remove the ability to include a comment on each 
  338. line.  This is illustrated in the next program.  Be sure to 
  339. compile and execute this program.
  340.  
  341.  
  342.  
  343.  
  344.  
  345.  
  346.  
  347.                                                          Page 3-6
  348.  
  349.                                       Chapter 3 - Program Control
  350.  
  351. ANOTHER POOR PROGRAMMING EXAMPLE
  352. -----------------------------------------------------------------
  353. Recalling UGLYFORM.C from the last chapter,      ================
  354. you saw a very poorly formatted program.  If        DUMBCONV.C
  355. you load and display DUMBCONV.C you will have    ================
  356. an example of poor formatting which is much 
  357. closer to what you will find in practice.  This is the same 
  358. program as TEMPCONV.C with the comments removed and the variable 
  359. names changed to remove the descriptive aspect of the names.  
  360. Although this program does exactly the same as the last one, it 
  361. is much more difficult to read and understand.  You should begin 
  362. to develop good programming practices now by studying this 
  363. program to learn what not to do.
  364.  
  365.  
  366. OUR FIRST STYLE PROGRAM
  367. -----------------------------------------------------------------
  368. This program does nothing practical except to    ================
  369. illustrate various styles of programming and         STYLE1.C
  370. how to combine some of the constructs            ================
  371. introduced in this chapter.  There is nothing 
  372. in this program that we have not studied so far in this tutorial.  
  373. The program is heavily commented and should be studied in detail 
  374. by the diligent C student to begin learning proper C programming 
  375. style.  Like all other example programs, this one can be compiled 
  376. and executed, and should be.
  377.  
  378.  
  379. PROGRAMMING EXERCISES
  380. -----------------------------------------------------------------
  381. 1.   Write a program that writes your name on the monitor ten 
  382.      times.  Write this program three times, once with each 
  383.      looping method.
  384.      
  385. 2.   Write a program that counts from one to ten, prints the 
  386.      values on a separate line for each, and includes a message 
  387.      of your choice when the count is 3 and a different message 
  388.      when the count is 7.
  389.  
  390.  
  391.  
  392.  
  393.  
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.  
  401.  
  402.  
  403.  
  404.  
  405.                                                          Page 3-7
  406.